package object3;

/**
 * 抽象类细节
 */
public class AbstractDetail01 {

    public static void main(String[] args) {
        /*
            1)抽象类不能被实例化
            2)抽象类不一定要包含abstract方法
            3)一旦包含了abstract方法，则该类必须声明为抽象类
            4)abstract只能修饰类和方法
            5)抽象类可以有任意成员(非抽象方法、构造器、静态属性)
            6)抽象方法不能有主体，即不能实现
            7)如果一个类继承了抽象类，则它必须实现抽象类的所有抽象方法
              除非它自己也声明为abstract类
            8)抽象方法不能使用private final 和 static来修饰，因为这些关键字都是和重写相违背的
         */
    }
}

abstract class TestAbstractDetail01 {

    public void hi() {
        System.out.println("hi");
    }
}

abstract class TestAbstractDetail012 {

    public abstract void hi();

}

abstract class H {

    public abstract void hi();//抽象方法

}

abstract class T {

    public abstract void hi();
}

abstract class T01 extends T {

}

class GG extends T {


    @Override
    public void hi() {

    }
}

//抽象类的本质还是类，所以可以有类的各种成员
abstract class DDD {

    public int n1 = 10;

    public static String name = "lmy";

    public void hi() {
        System.out.println("hi");
    }

    public abstract void hello();

    public static void ok() {
        System.out.println("ok");
    }
}